﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using netDxf;
using netDxf.Blocks;
using netDxf.Collections;
using netDxf.Entities;
using netDxf.Header;
using netDxf.Objects;
using netDxf.Tables;
using netDxf.Units;

namespace ShowDXF
{

    //以下为获取dxf图形中的直线
    public class LoadLine
    {
        public int Line_count;//定义直线的数量
        public List<float> LinePointStartX = new List<float>(); //定义直线起点的X值的数组
        public List<float> LinePointStartY = new List<float>(); //定义直线起点的Y值的数组
        public List<float> LinePointEndX = new List<float>(); //定义直线终点的X值的数组
        public List<float> LinePointEndY = new List<float>(); //定义直线终点的X值的数组

        public List<int> LineColorR = new List<int>(); //定义直线颜色R值的数组
        public List<int> LineColorG = new List<int>(); //定义直线颜色G值的数组
        public List<int> LineColorB = new List<int>(); //定义直线颜色B值的数组

        /// <summary>
        /// Dxf中直线在X轴的最大和最小值
        /// </summary>
        public static List<float> LineExPoint_X = new List<float>(); //定义图形的最大和最小X值的数组
        /// <summary>
        /// Dxf中直线在Y轴的最大和最小值
        /// </summary>
        public static List<float> LineExPoint_Y = new List<float>(); //定义图形的最大和最小Y值的数组

        /// <summary>
        /// 获取Dxf中的直线
        /// </summary>
        public void GetLine() //获取dxf文件中所有直线的坐标
        {

            Line_count = LoadPath.DxfDoc.Lines.Count(); //获取dxf文件中所有直线的数量                                 
            foreach (Line ln in LoadPath.DxfDoc.Lines) //遍历DXF文件中的直线
            {
                LinePointStartX.Add(Convert.ToSingle(ln.StartPoint.X));    //直线起点的X值加入上面定义的数组中,同时数据类型转为float
                LinePointStartY.Add(Convert.ToSingle(ln.StartPoint.Y));   //直线起点的Y值加入上面定义的数组中,同时数据类型转为float
                LinePointEndX.Add(Convert.ToSingle(ln.EndPoint.X));      //直线终点的X值加入上面定义的数组中,同时数据类型转为float
                LinePointEndY.Add(Convert.ToSingle(ln.EndPoint.Y));     //直线终点的Y值加入上面定义的数组中,同时数据类型转为float  
                LineColorR.Add(Convert.ToInt32(ln.Color.R));           //直线颜色的R值加入上面定义的数组中,同时数据类型转为Int  
                LineColorG.Add(Convert.ToInt32(ln.Color.G));          //直线颜色的G值加入上面定义的数组中,同时数据类型转为Int  
                LineColorB.Add(Convert.ToInt32(ln.Color.B));         //直线颜色的B值加入上面定义的数组中,同时数据类型转为Int  

            }
        }

        public List<float> GetExPoint_LineX() //获取dxf文件中直线的最大和最小X值的数组_LineX

        {
            //定义直线的最大和最小X值的数组_LineX
            //X坐标
            if (Line_count > 0)
            {
                LineExPoint_X.Add(LinePointStartX.Min()); //把直线起点坐标中(StartX)，X轴的最小值放入数组
                LineExPoint_X.Add(LinePointStartX.Max()); //把直线起点坐标中(StartX)，X轴的最大值放入数组

                LineExPoint_X.Add(LinePointEndX.Min());  //把直线终点坐标中(EndX)，X轴的最小值放入数组
                LineExPoint_X.Add(LinePointEndX.Max());  //把直线终点坐标中(EndY)，X轴的最大值放入数组

            }
            return LineExPoint_X;
        }

        public List<float> GetExPoint_LineY() //获取dxf文件中直线的最大和最小Y值的数组_LineY

        {
            //定义直线的最大和最小X值的数组_LineY
            //Y坐标
            if (Line_count > 0)
            {
                LineExPoint_Y.Add(LinePointStartY.Min()); //把直线起点坐标中(StartY)，Y轴的最小值放入数组
                LineExPoint_Y.Add(LinePointStartY.Max()); //把直线起点坐标中(StartY)，Y轴的最大值放入数组

                LineExPoint_Y.Add(LinePointEndY.Min());  //把直线终点坐标中(EndY)，Y轴的最小值放入数组
                LineExPoint_Y.Add(LinePointEndY.Max());  //把直线终点坐标中(EndY)，Y轴的最大值放入数组

            }
            return LineExPoint_Y;

        }

    }
}
